package com.event.management.backend.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.event.management.backend.dto.QuestionnaireAnswerDTO;
import com.event.management.backend.dto.QuestionnaireQueryParam;
import com.event.management.backend.dto.QuestionnaireTemplateDTO;

/**
 * 问卷服务接口
 */
public interface QuestionnaireService {
    
    /**
     * 分页查询问卷模板列表
     * @param queryParam 查询参数
     * @return 分页结果
     */
    IPage<QuestionnaireTemplateDTO> getQuestionnairePage(QuestionnaireQueryParam queryParam);
    
    /**
     * 根据ID获取问卷模板详情
     * @param id 模板ID
     * @return 问卷模板详情
     */
    QuestionnaireTemplateDTO getQuestionnaireById(Long id);
    
    /**
     * 添加问卷模板
     * @param questionnaireDTO 问卷模板信息
     * @return 新增的模板ID
     */
    Long addQuestionnaire(QuestionnaireTemplateDTO questionnaireDTO);
    
    /**
     * 更新问卷模板
     * @param id 模板ID
     * @param questionnaireDTO 问卷模板信息
     * @return 是否成功
     */
    boolean updateQuestionnaire(Long id, QuestionnaireTemplateDTO questionnaireDTO);
    
    /**
     * 删除问卷模板
     * @param id 模板ID
     * @return 是否成功
     */
    boolean deleteQuestionnaire(Long id);
    
    /**
     * 将问卷模板关联到活动
     * @param eventId 活动ID
     * @param templateId 问卷模板ID
     * @return 是否成功
     */
    boolean associateToEvent(Long eventId, Long templateId);
    
    /**
     * 获取活动的问卷提交列表
     * @param eventId 活动ID
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 问卷提交列表
     */
    IPage<QuestionnaireAnswerDTO> getQuestionnaireResults(Long eventId, Integer pageNum, Integer pageSize);
    
    /**
     * a用户提交问卷反馈
     * @param answerDTO 问卷答案
     * @return 是否成功
     */
    boolean submitQuestionnaire(QuestionnaireAnswerDTO answerDTO);
    
    /**
     * 查询用户问卷提交记录
     * @param userId 用户ID
     * @param eventId 活动ID
     * @param templateId 问卷模板ID
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 问卷提交记录列表
     */
    IPage<QuestionnaireAnswerDTO> getUserQuestionnaireSubmissions(Long userId, Long eventId, Long templateId, Integer pageNum, Integer pageSize);
    
    /**
     * 检查用户是否有权限管理问卷模板
     * @param templateId 模板ID
     * @return 是否有权限
     */
    boolean checkTemplateManagePermission(Long templateId);
} 